package com.ibeeking.found.id.rest.service;

import com.ibeeking.found.id.api.common.dto.*;
import com.ibeeking.found.id.service.common.param.*;
import com.alibaba.nacos.shaded.com.google.protobuf.ServiceException;

import java.util.List;

public interface ISerialNoRuleGenerateService {

    /***
     * 新增
     */
    Boolean add(SerialNoRuleParam serialNoRuleParam);

    /***
     * 批量新增
     */
    Boolean batchAdd(List<SerialNoRuleParam> serialNoRuleParams);
    /***
     * 修改
     */
    Boolean modify(SerialNoRuleParam serialNoRuleParam);

    /***
     * 批量修改
     */
    Boolean batchModify(List<SerialNoRuleParam> serialNoRuleParams);
    /***
     * 通过id查询
     */

    SerialNoRuleDTO queryById(Long id);

    /***
     * 通过keycode查询
     */

    List<SerialNoRuleDTO> queryByKeyCode(String  keyCode);

    /***
     * 通过id删除
     */
    Boolean del(Long id);

    /***
     * 通过keycode删除
     */
    Boolean delByKeyCode(List<Long> ids);

    /***
     * 通过不同的场景Code生成相应的序列号
     */
    SerialNumberDTO generateSerialNo(String scenCode);

    /***
     * 通过不同的场景Code生成相应的序列号
     */
    SerialNumberDTO generateSerialNo(String scenCode, Long shopId);

    /***
     * 通过不同的场景Code生成相应的序列号
     */
    SerialNumberDTO generateSerialNo(List<NoRuleDTO> ruleDTOS, String scenCode) throws ServiceException;
    /*
     * 合同规则code
     */
    Boolean saveContractSerialNoRule(List<ContractSerialNoRuleParam> params);

    List<ContractSerialNoRuleDTO> queryContractSerialNoRule();
    /*
     * 订单规则code
     */
    Boolean saveOrderSerialNoRule(List<OrderSerialNoRuleParam> params);

    List<OrderSerialNoRuleDTO> queryOrderSerialNoRule();
    /*
     * 会员卡号规则code
     */
    Boolean saveMemberCardNoRule(List<MemberCardNoRuleParam> params);

    List<MemberCardNoRuleDTO> queryMemberCardNoRule();
    /*
     * 库存入库单号规则code
     */
    Boolean saveInstockSerialNoRule(List<InstockSerialNoRuleParam> params);

    List<InstockSerialNoRuleDTO> queryInstockSerialNoRule();
    /*
     * 库存出库单号规则code
     */
    Boolean saveOutstockSerialNoRule(List<OutstockSerialNoRuleParam> params);

    List<OutstockSerialNoRuleDTO> queryOutstockSerialNoRule();
    /*
     * 库存盘点单号规则code
     */
    Boolean saveInvCheckSerialNoRule(List<InvCheckSerialNoRuleParam> params);

    List<InvCheckSerialNoRuleDTO> queryInvCheckSerialNoRule();

}
